//
//  CZModalAnimation.swift
//  GZWeibo666
//
//  Created by iOS on 16/05/9.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

class CZModalAnimation: NSObject, UIViewControllerAnimatedTransitioning {

    /// 返回转场动画的时间
    public func transitionDuration(transitionContext: UIViewControllerContextTransitioning?) -> NSTimeInterval {
        return 0.25
    }
    
    /*
        transitionContext: 转场上下文,提供转场需要的元素
            1.containerView: 容器视图
            2.completeTransition: 通过completeTransition方法告诉系统,转场动画完成.(如果没有告诉系统转场动画完成,无法进行后续的交互)
            3.viewControllerForKey: 通过key来查找控制器
                modal出控制器时:
                    UITransitionContextFromViewControllerKey: 调用 presentViewController 的对象
                    UITransitionContextToViewControllerKey: modal出来的控制器
    
                dismiss控制器时:
                    UITransitionContextFromViewControllerKey: modal出来的控制器
                    UITransitionContextToViewControllerKey: 调用 presentViewController 的对象

            4.viewForKey: 通过key来查找view
                UITransitionContextFromViewKey:
                
                UITransitionContextToViewKey:
    

    */
    
    /// 在这个方法里面执行转场动画
    /// 当我们实现这个方法后,需要我们手动将modal出来控制器的view添加到容器视图,需要调用completeTransition,不然无法交互
    func animateTransition(transitionContext: UIViewControllerContextTransitioning) {
        // 获取 modal 出来控制器的view
        let toView = transitionContext.viewForKey(UITransitionContextToViewKey)!
        
        // 将 toView 添加到容器视图
        transitionContext.containerView()?.addSubview(toView)
        
        // 设置 modal 出来控制器的view 的y方向的缩放
        toView.transform = CGAffineTransformMakeScale(1, 0)
        
        // 设置锚点
        toView.layer.anchorPoint = CGPoint(x: 0.5, y: 0)
        
        // 做动画
        UIView.animateWithDuration(transitionDuration(transitionContext), animations: { () -> Void in
            toView.transform = CGAffineTransformMakeScale(1, 1)
            }) { (_) -> Void in

                // 必须告诉系统转场完成了
                transitionContext.completeTransition(true)
        }
        
    }
}
